#!/bin/bash

# 设置go命令别名脚本
# 用于在任何位置执行go命令时调用项目中的go.sh脚本

echo "设置go命令别名..."

# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"

# 定义go.sh脚本路径
GO_SCRIPT_PATH="$PROJECT_ROOT/scripts/go.sh"

echo "项目根目录: $PROJECT_ROOT"
echo "go.sh脚本路径: $GO_SCRIPT_PATH"

# 检查go.sh脚本是否存在
if [ ! -f "$GO_SCRIPT_PATH" ]; then
    echo "错误：找不到go.sh脚本 $GO_SCRIPT_PATH"
    exit 1
fi

# 检查脚本是否具有可执行权限
if [ ! -x "$GO_SCRIPT_PATH" ]; then
    echo "警告：go.sh脚本没有可执行权限，正在添加..."
    chmod +x "$GO_SCRIPT_PATH"
fi

# 确定shell配置文件路径
if [ -n "$ZSH_VERSION" ] || [ "$SHELL" = "/bin/zsh" ]; then
    SHELL_CONFIG="$HOME/.zshrc"
else
    SHELL_CONFIG="$HOME/.bash_profile"
fi

echo "检测到shell配置文件: $SHELL_CONFIG"

# 备份原配置文件
if [ -f "$SHELL_CONFIG" ]; then
    BACKUP_FILE="$SHELL_CONFIG.go_alias_backup"
    echo "备份原配置文件到: $BACKUP_FILE"
    cp "$SHELL_CONFIG" "$BACKUP_FILE"
fi

# 检查是否已存在别名
if grep -q "alias go=" "$SHELL_CONFIG" 2>/dev/null; then
    echo "检测到已存在的go别名，正在更新..."
    # 删除旧的别名行
    sed -i.bak '/alias go=/d' "$SHELL_CONFIG"
    # 删除可能的备份文件
    rm -f "$SHELL_CONFIG.bak"
fi

# 添加新的别名
echo "" >> "$SHELL_CONFIG"
echo "# 添加项目go.sh脚本别名" >> "$SHELL_CONFIG"
echo "alias go='$GO_SCRIPT_PATH'" >> "$SHELL_CONFIG"
echo "" >> "$SHELL_CONFIG"

echo "别名已添加到 $SHELL_CONFIG"

# 重新加载配置
echo "重新加载shell配置..."
source "$SHELL_CONFIG" 2>/dev/null || echo "请手动执行: source $SHELL_CONFIG"

echo ""
echo "设置完成！现在您可以在任何位置使用'go'命令来执行项目中的go.sh脚本。"
echo "如果当前终端未生效，请执行以下命令或重新打开终端："
echo "source $SHELL_CONFIG"